package main

import "fmt"

func main() {
	a1 := []int{1, 3, 5}
	a2 := a1
	var a3 = make([]int, 3)
	copy(a3, a1)
	fmt.Println(a1, a2, a3)
	a1[0] = 100
	fmt.Println(a1, a2, a3)

	//将a1中索引为1的3这个元素删除掉
	a1 = append(a1[:1], a1[2:]...)
	//fmt.Println(a1)
	fmt.Printf("a1=%v len(a1)=%d cap(a1)=%d \n", a1, len(a1), cap(a1))

	x1 := []int{1, 3, 5}
	s1 := x1[:]
	fmt.Println(s1, len(s1), cap(s1))
	/* 	1.切片不保存具体的值
	   	2.切片对应一个底层数组
	   	3.底层数组都是一个占用一块连续的内存 */
	fmt.Printf("s1索引1的指针地址：%p \n", &s1[1])
	fmt.Printf("x1索引1的指针地址：%p \n", &x1[1])
	//1 5  修改了底层数组内存指针位置的内容，十六进制地址，切片
	s1 = append(s1[:1], s1[2:]...)
	//s1=[1 5],len(s1)=2 cap(s1)=3
	fmt.Printf("s1=%v,len(s1)=%d cap(s1)=%d \n", s1, len(s1), cap(s1))
	fmt.Printf("s1索引1的指针地址：%p \n", &s1[1])
	fmt.Printf("x1索引1的指针地址：%p \n", &x1[1])
	//x1=[1 5 5],len(x1)=3 cap(x1)=3
	fmt.Printf("x1=%v,len(x1)=%d cap(x1)=%d \n", x1, len(x1), cap(x1))

	//以数组的为例
	x2 := []int{1, 3, 5, 7, 9} //数组
	s2 := x2[1:4]
	s2[1] = 10                        //修改了底层数组内存指针地址位置的内容，切片
	fmt.Printf("x2=%v s2=%v", x2, s2) //x2=[1 3 10 7 9] s2=[3 10 7]

}
